package com.leetcode.程序员面试金典.hard;

/**
 * @author 覃国强
 * @date 2022-01-29 15:04
 */
public class 面试题_17_06_2出现的次数 {

  public static void main(String[] args) {
    Solution solution = new Solution();
    int n = 25;
    int res = solution.numberOf2sInRange(n);
    System.out.println(res);
  }


  static
  class Solution {
    public int numberOf2sInRange(int n) {

      // 个位数出现 2 的频率：每 10 个出现 1 个
      // 十位数出现 2 的频率：每 100 个出现 10 个
      // 百位数出现 2 的频率：每 1000 个出现 100 个
      //                      10000      1000
      // 处理不能整除的情况

      int ge = (n / 10) * 1 + ((n % 10) > 1 ? 1 : 0);
      int shi = (n / 100) * 10 + ((n % 100) > 19 ? Math.min((n % 100) - 19, 10) : 0);
      int bai = (n / 1000) * 100 + ((n % 1000) > 199 ? Math.min((n % 1000) - 199, 100) : 0);
      int qian = (n / 10000) * 1000 + ((n % 10000) > 1999 ? Math.min((n % 10000) - 1999, 1000) : 0);

      int res = 0;
      int base = 10;
      int prop = 1;
      int bound = 2;

      while (true) {
        res += (n / base) * prop + ((n % base) > (bound - 1) ? Math.min((n % base) - bound + 1, prop) : 0);
        if (n / base == 0) {
          return res;
        }
        base *= 10;
        prop *= 10;
        bound *= 10;
      }
    }
  }

}
